package etp.server;

import java.util.ArrayList;
import java.util.List;

import javax.jdo.PersistenceManager;

import etp.client.Codigos;
import etp.client.ErroProjeto;
import etp.client.Projeto;
import etp.client.Tarefa;

public final class AdminProjeto {
	
	public static ErroProjeto criarProjeto (Projeto p) {
  //public static int criarProjeto (String cod, String nome, Recurso responsavel){
		
		if (p.getCod().length()!=4){
			return ErroProjeto.TAMANHO_CODIGO_INVALIDO;
		}
		
		if (p.getNome().length()>40){
			return ErroProjeto.TAMANHO_NOME_INVALIDO;
		}
		
		if (p.getResponsavel().equals(null)){
			return ErroProjeto.PROJETO_SEM_RESPONSAVEL;
		}
		
		PersistenceManager pm = PMF.get().getPersistenceManager();
		try{
		String query = "select from " + Projeto.class.getName() + 
		" where cod == '" + p.getCod() + "'";
		List<Projeto> projetos = (List<Projeto>) pm.newQuery(query).execute();
		
		if (projetos.size()==0){ //se = 0, o projeto nao existe - Posso criar!
			p.setPkey(KFactory.keyP());
			pm.makePersistent(p);
			Codigos cf = CodFactory.get();
			cf.incP();
			pm.makePersistent(cf);
		}
		else{
			return ErroProjeto.PROJETO_JA_EXISTE;
		}
		//verificar se projeto existe - ver se esta certo
		}
		finally{
			pm.close();
		}
		return ErroProjeto.SUCESSO;		
	}
	
	public static ErroProjeto forcaExclusaoProjeto (String cod){
		
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<Projeto> lp = new ArrayList<Projeto>();
		
		try{		
		String query = "select from " + Tarefa.class.getName() + " where projeto == '"
		+ cod + "'";
		List<Tarefa> tarefas = (List<Tarefa>) pm.newQuery(query).execute();
		
		for (int i = 0; i < tarefas.size(); i++){
			pm.deletePersistent(tarefas.get(i));
		}
		
		pm.deletePersistent(lp.get(0));
		
		return ErroProjeto.SUCESSO;
			
		}catch(NullPointerException npe){
			return ErroProjeto.NPE;
		}
		finally{
			pm.close();
		}
	}
	
	public static ErroProjeto excluirProjeto (String cod) {
		
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<Projeto> lp = new ArrayList<Projeto>();
				
		try{
			String query = "select from " + Projeto.class.getName() + 
		" where cod == '" + cod + "'" ;
		lp = (List<Projeto>) pm.newQuery(query).execute(); 
		
		if (lp.isEmpty()){
			return ErroProjeto.PROJETO_INEXISTENTE;
		}
		
//		query = "select from " + Tarefa.class.getName() + " where projeto == '"
//		+ cod + "'";
//		List<TarefaPersistente> tarefas = (List<TarefaPersistente>) pm.newQuery(query).execute();
//		
//		if (!(tarefas.isEmpty())){
//			return ErroProjeto.PROJ_POSSUI_TAR_VINCULADA;
//		}
//		else{
			pm.deletePersistent(lp.get(0));
		
			return ErroProjeto.SUCESSO;
//		}
		
		}catch(NullPointerException npe){
			return ErroProjeto.NPE;
		}
		finally{
			pm.close();
		}
	}

	public static ErroProjeto modificarProjeto (String cod, Projeto p){
		
		PersistenceManager pm = PMF.get().getPersistenceManager();
	    try {
	        String query = "select from " + Projeto.class.getName() + 
			" where cod == '" + cod +"'" ;
	        	List<Projeto> lp = (List<Projeto>) pm.newQuery(query).execute();
	        	lp.get(0).setNome(p.getNome());
	        	lp.get(0).setResponsavel(p.getResponsavel());
	        	
	    return ErroProjeto.SUCESSO;
	      
	    } finally {
	        pm.close();
	    }

		
		//excluirProjeto(cod);
		//criarProjeto(cod, nome, responsavel);
	
	}

	public static List<Projeto> listarProjeto(){
		
		PersistenceManager pm = PMF.get().getPersistenceManager();
		try{
			String query = "select from " + Projeto.class.getName();
		    List<Projeto> projetos = (List<Projeto>) pm.newQuery(query).execute();
		    
		    
		    if (projetos.isEmpty()) {
		    	
		    	return new ArrayList<Projeto>(); //Projeto Inexistente
		    } 
		    
		    return projetos;
		}
		finally{
			pm.close();
		}
	}
	
	public static Projeto getProjeto(String cod){
		
		PersistenceManager pm = PMF.get().getPersistenceManager();
		try{
			String query = "select from " + Projeto.class.getName() + 
											" where cod == '" + cod + "'";
		    List<Projeto> projetos = (List<Projeto>) pm.newQuery(query).execute();
		    
		    
		    if (projetos.isEmpty()) {
		    	
		    	return null; //Projeto Inexistente
		    } 
		    
		    return projetos.get(0);
		}
		finally{
			pm.close();
		}
	}
}
